package com.browsesoft.adapter;

import java.util.Hashtable;
import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.browsesoft.EntityManager;
import com.browsesoft.ManagerGroup;
import com.browsesoft.SequenceFind;
import com.browsesoft.baseadapter.AdvancedSimpleEntity;
import com.browsesoft.dbtools.DBTools;
import com.browsesoft.htmlcomponent.HTMLBasicComponent;
import com.browsesoft.user.User;

/**
 * 日程安排
 */
public class CalendarFormModel extends AdvancedSimpleEntity {
	/**
	 * 
	 */
	private static final long serialVersionUID = 6754637808572664879L;

	/**
	 * 日程表所对用户的id
	 */
	private String userID = new String();

	/**
	 * 属性列表
	 */
	private Hashtable attributes = new Hashtable();

	/**
	 * 日程安排的表名
	 */
	private String tableName = "t_calendar";

	/**
	 * 父id
	 */
	private String parentID = null;

	/**
	 * 初始化
	 */
	public CalendarFormModel() {
		super();
	}

	/**
	 * 初始化
	 */
	public CalendarFormModel(Hashtable ht) {
		this.attributes = ht;
	}

	/**
	 * 初始化model
	 */
	public void init(HttpServletRequest request) throws Exception {
	}

	/**
	 * 处理用户请求
	 * 
	 * @param request
	 *            客户端请求
	 */
	public void service(HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		if (parentID == null) {
			parentID = request.getParameter("parentid");
		}
		if (parentID != null) {
			// 父id中的月份有问题，修改
			String month = String.valueOf(Integer.parseInt(parentID.substring(
					4, 6)) + 1);
			if (month.length() < 2) {
				month = "0" + month;
			}
			// 取得yyyy-mm-dd格式的日期
			String s = parentID.substring(0, 4) + "-" + month + "-"
					+ parentID.substring(6, 8);
			// 设置开始日期
			attributes.put("starttime", s);
			// 设置用户没有外出
			attributes.put("isout", "否");
		}
		// 取得当前用户
		User user = (User) request.getSession().getAttribute("loginUser");
		// 得到当前用户的id
		userID = user.getID();
	}

	/**
	 * 设置模型所对应的组件
	 * 
	 * @param component
	 *            对应的组件
	 */
	public void setComponent(HTMLBasicComponent component) {
	}

	/**
	 * 由Component决定需要Model处理的元素内容，在Component的updateElement()方法中调用
	 */
	public void updatePageElement(HTMLBasicComponent c) throws Exception {
	}

	/**
	 * 更新属性
	 * 
	 * @param ht
	 *            存储属性的哈息表
	 */
	public void updateAttributes(Hashtable ht) throws Exception {
		// parentID不为空，说明是新增
		if (parentID != null) {
			// 设置父ID
			attributes.put("userid", userID);
			attributes.put("parentid", parentID);
			this.insert();
			parentID = null;
		}
		// 更新
		this.attributes.putAll(ht);
		this.update();
	}

	/**
	 * 得到属性
	 */
	public Hashtable getAttributes() {
		return this.attributes;
	}

	/**
	 * 得到选择列表
	 * 
	 * @param name
	 *            名字
	 * @return 列表
	 */
	public Iterator getOptions(String name) throws Exception {
		return null;
	}

	/**
	 * 增加
	 */
	public void insert() throws Exception {
		// 产生id
		String id = Integer.toString(SequenceFind.getID());
		this.attributes.put("id", id);
		// 把自己加到管理器中
		EntityManager entitymanager = (EntityManager) ManagerGroup
				.getManagerGroup().getManager("entity");
		entitymanager.add(this);
		// 写库
		DBTools.insert(this.tableName, this.attributes);
	}

	/**
	 * 修改
	 */
	public void update() throws Exception {
		DBTools.update(this.tableName, this.getID(), this.attributes);
	}

	/**
	 * 删除
	 */
	public void delete() throws Exception {
		// 从管理器中删除
		EntityManager entitymanager = (EntityManager) ManagerGroup
				.getManagerGroup().getManager("entity");
		entitymanager.remove(this);
		// 从数据库中删除
		DBTools.delete(this.tableName, getID());
	}

	/**
	 * 得到id
	 */
	public String getID() {
		return (String) attributes.get("id");
	}

	/**
	 * 该时间是否在安排时间内
	 */
	public boolean isOutWithDate(String date, String hour) {
		// 是否在日程安排的时间范围内
		boolean isAt;
		try {
			// 指定的时间
			String s = date + hour;
			// 安排的开始时间
			String start = (String) attributes.get("starttime")
					+ (String) attributes.get("starthour");
			// 安排的结束时间
			String end = (String) attributes.get("endtime")
					+ (String) attributes.get("endhour");
			// 如果在安排的时间内
			if (start.compareTo(s) < 0 && s.compareTo(end) < 0) {
				isAt = true;
			} else {
				isAt = false;
			}
		} catch (Exception e) {
			isAt = false;
		}
		return isAt;
	}

	/**
	 * 建立关系
	 */
	public void createRelation() {
	}

	public void sychronDelete() {
		// TODO Auto-generated method stub

	}

	public void sychronUpdate(Hashtable attributes) {
		// TODO Auto-generated method stub

	}

}